﻿#define  _CRT_SECURE_NO_WARNINGS
//字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
//
//
//
//来源：力扣（LeetCode）
//链接：https ://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//#include<stdio.h>
char* reverseLeftWords(char* s, int n) {
    int len = strlen(s);
    int i = 0;
    while (n) {
        char start = s[0];
        for (i = 1;i <= len - 1;i++) {
            s[i - 1] = s[i];
        }
        s[len - 1] = start;
        n--;
    }
    return s;
}
int main() {
	char s[20] = "abcdefg";
	int k = 2;
   char* ret= reverseLeftWords(s, k);
    printf("%s\n", ret);
	return 0;
}
//把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。
//
//给你一个可能存在 重复 元素值的数组 numbers ，它原来是一个升序排列的数组，并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如，数组 [3, 4, 5, 1, 2] 为[1, 2, 3, 4, 5] 的一次旋转，该数组的最小值为 1。  
//
//来源：力扣（LeetCode）
//链接：https ://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
int minArray(int* numbers, int numbersSize) {
    int min = numbers[0];
    int i = 0;
    for (i = 1;i < numbersSize;i++) {
        if (numbers[i] < min) {
            min = numbers[i];
        }
    }
    return min;
}
 
//给你一个非负整数 num ，请你返回将它变成 0 所需要的步数。 如果当前数字是偶数，你需要把它除以 2 ；否则，减去 1 。


int numberOfSteps(int num) {
    int n = 0;
    int i = 0;
    while (num) {

        if (num % 2 == 1) {
            num--;
            n += 1;
        }
        else {
            num >>= 1;
            n++;
        }

    }
    return n;
}